package Clases.domain;

import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;

import pos.data.JDBCBarrioDAO;
import pos.data.JDBCContenedorDAO;
import pos.data.JDBCManifestacionDAO;
import pos.data.JDBCUsuarioDAO;

public class ReciclajeStore {

	private static ReciclajeStore rs;

	private static List barrios;

	public static synchronized ReciclajeStore getInstance() {
		if (rs == null)
			rs = new ReciclajeStore();
		return rs;
	}

	private ReciclajeStore() {

		barrios = (new JDBCBarrioDAO()).selectAllBarrios();
	}

	// Este metodo nos devuelve una lista de los barrios existentes

	public List getBarrios() {
		return barrios;
	}

	// Este metodo nos devuelve un barrio existente en nuestra lista, en caso de
	// no existir devuelve null

	public Barrio getBarrio(String ba) {
		Barrio resultado = null;
		for (Iterator iter = barrios.iterator(); iter.hasNext();) {
			Barrio b = (Barrio) iter.next();
			if (b.getNombre().compareTo(ba) == 0) {
				resultado = b;
			}
		}
		return resultado;

	}

	public double cuentaTodosContenedores() {
		double numContenedores = 0;
		for (Iterator iter = barrios.iterator(); iter.hasNext();) {
			Barrio b = (Barrio) iter.next();
			List zonas = b.getZonas();
			Iterator itzonas = zonas.iterator();
			while (itzonas.hasNext()) {
				Zona zona = (Zona) itzonas.next();
				List cont = zona.getZonaContenedor();
				numContenedores = numContenedores + cont.size();
			}
		}
		return numContenedores;
	}

	public double cuentaTodosContenedoresZona(String barrio, String zona) {
		double contador = 0;
		List c = new LinkedList();
		List b = ReciclajeStore.getInstance().getBarrios();
		Iterator itbarrios = b.iterator();
		while (itbarrios.hasNext()) {
			Barrio ba = (Barrio) itbarrios.next();

			if (ba.getNombre().equals(barrio)) {
				List zonas = ba.getZonas();
				Iterator itZonas = zonas.iterator();
				while (itZonas.hasNext()) {
					Zona zo = (Zona) itZonas.next();

					if (zo.getNombre().equals(zona)) {
						c = zo.getZonaContenedor();
						contador = c.size();

					}
				}
			}
		}
		return contador;
	}

	public int cuentaTodosTipo(String tipo, String barrio, String zona) {
		int contador = 0;
		List c = new LinkedList();
		List b = ReciclajeStore.getInstance().getBarrios();
		Iterator itbarrios = b.iterator();
		while (itbarrios.hasNext()) {
			Barrio ba = (Barrio) itbarrios.next();
			if (ba.getNombre().equals(barrio)) {
				List zonas = ba.getZonas();
				Iterator itZonas = zonas.iterator();
				while (itZonas.hasNext()) {
					Zona zo = (Zona) itZonas.next();
					if (zo.getNombre().equals(zona)) {
						c = zo.getZonaContenedor();
						Iterator itcont = c.iterator();
						while (itcont.hasNext()) {
							Contenedor contenedor = (Contenedor) itcont.next();
							if (contenedor.getTipo().equals(tipo)) {
								contador++;

							}
						}
					}
				}
			}
		}
		return contador;
	}

}